#!/bin/bash

if [ $# -lt 1 ]
then
    echo -e "[ \033[36m$(date "+%Y-%m-%d %H:%M:%S")\033[0m ]	\033[31mERROR\033[0m No Args Input..."
    exit ;
fi

# 使用case语句进行不同功能的判断
case $1 in
"start"){
        # metastoe和hiveserver2都是前台启动的，这里改成后台启动，并且将日志输出到/dev/null
        nohup /opt/module/hive-3.1.2/bin/hive  --service metastore > /dev/null 2>&1 &
	echo -e "[ \033[36m$(date "+%Y-%m-%d %H:%M:%S")\033[0m ]  \033[32mINFO\033[0m started metastore"
        # 这里sleep 10S 因为如果hive配置里面配置了metasote.url的话
        # hiveserver2不会启动内部的连接元数据的metatsote，先启动的话，会报错
        sleep 10s
        nohup /opt/module/hive-3.1.2/bin/hive  --service hiveserver2 > /dev/null 2>&1 &
	echo -e "[ \033[36m$(date "+%Y-%m-%d %H:%M:%S")\033[0m ]  \033[32mINFO\033[0m started hiveserver2"
};;
"stop"){
        # hive，没有自己的关闭命令，一般都是使用kill
        # metastore和hivesever2在jps里面都是RunJar，获取他们的PID,然后kill -9
	jps | grep RunJar | grep -v grep | sed 's/^\s*//' | sed 's/[[:space:]].*//' | xargs kill -9
	echo -e "[ \033[36m$(date "+%Y-%m-%d %H:%M:%S")\033[0m ]  \033[32mINFO\033[0m stoped metastore and hiveserver2"
};;
"status"){
        # status功能主要是因为metastore和hiveServer2在jps里面都是只会显示RunJar，不好区分，所以添加这个功能
        #首先查询是否存在两个进程
        meta=`jps -m | grep metastore`
        server=`jps -m | grep HiveServer2`

        # 判断是否存在
        if [ -n "$meta" ]
        then
                # 如果存在进程的话，使用下面的这句命令输出 PID metastore格式，方便观察
                jps -m | grep metastore | awk '{print $1}' | xargs echo metastore | awk '{print $2,$1}'
        else
                # 如果没有启动的话，输出metastore stopped
                echo -e "[ \033[36m$(date "+%Y-%m-%d %H:%M:%S")\033[0m ]  \033[33mINFO\033[0m metastore stopped"
        fi
        if [ -n "$server" ]
        then
                jps -m | grep HiveServer2 | awk '{print $1}' | xargs echo hiveserver2 | awk '{print $2,$1}'
        else
                echo -e "[ \033[36m$(date "+%Y-%m-%d %H:%M:%S")\033[0m ]  \033[33mINFO\033[0m hiveserver2 stopped"
        fi
};;
*){
        echo "使用: myhive 参数名"
        echo "命令参数列表："
        echo "start 先启动metastore服务，间隔10s再启动hiveserver2服务"
        echo "stop 关闭metastore和hiveserver2服务"
        echo "status 查看metastore和hiveserver2服务的启动情况"
};;
# 注意case语句一定要这个esac的结尾，我就经常忘记加，esac其实就是case的倒序
esac
